﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ECommerce.Model.Productos
{
    public class Producto : Objeto
    {
        public override string NavigateUrl
        {
            get
            {
                return "/Edición/Producto.aspx?Id=" + this.Id.ToString();
            }
        }
        private ECommerce.Model.Productos.CódigosProducto.CódigoProducto[] códigosProducto;
        public ECommerce.Model.Productos.CódigosProducto.CódigoProducto[] CódigosProducto
        {
            get { return this.códigosProducto; }
            set { this.códigosProducto = value; }
        }
        private ECommerce.Model.Productos.Familia[] familias;
        public ECommerce.Model.Productos.Familia[] Familias
        {
            get { return familias; }
            set { familias = value; }
        }
        private ECommerce.Model.Productos.Precios.Precio[] precios;
        public ECommerce.Model.Productos.Precios.Precio[] Precios
        {
            get { return precios; }
            set { precios = value; }        
        }
        private ECommerce.Model.Productos.Package[] packages;
        public ECommerce.Model.Productos.Package[] Packages
        {
            get { return packages; }
            set { packages = value; }
        }
        public override void Load(int ident)
        {
            base.Load(ident);
            this.Id = ident;
            this.Load(ECommerce.DAO.Cache.Productos.Producto.GetProductoById(ident));
            if (this.Id == 0)
            {
                this.Id = ident;
                this.Load(ECommerce.DAO.SQL.Productos.Producto.GetProductoById(ident));
                this.Packages = ECommerce.DAO.Cache.Productos.Package.GetPackagesByIdProducto(ident);
                if (this.Packages == null)
                    this.Packages = ECommerce.DAO.SQL.Productos.Package.GetPackagesByProductoId(ident);
                this.Precios = ECommerce.DAO.Cache.Productos.Precios.Precio.GetPreciosByIdProducto(ident);
                if (this.Precios ==null)
                    this.Precios = ECommerce.DAO.SQL.Productos.Precios.Precio.GetPreciosByProductoId(ident);
                this.CódigosProducto = ECommerce.DAO.Cache.Productos.CódigosProducto.CódigoProducto.GetCódigosProductoByProductoId(ident);
                if (this.CódigosProducto==null)
                    this.CódigosProducto = ECommerce.DAO.SQL.Productos.CódigosProducto.CódigoProducto.GetCódigosProductoByProductoId(ident);
                this.Familias = ECommerce.DAO.Cache.Productos.Familia.GetFamiliasByIdProducto(ident);
                if (this.Familias == null)
                    this.Familias = ECommerce.DAO.SQL.Productos.Familia.GetFamiliasByProductoId(ident);            
                ECommerce.DAO.Cache.Productos.Producto.SetProducto(this);
            }
        }
        public override void Load(System.Data.DataRow dr)
        {
            base.Load(dr);
            ECommerce.Factory.Productos.Producto.Load(this, dr);
            ECommerce.DAO.Cache.Productos.Producto.SetProducto(this);
        }
        public override void Save()
        {
            base.Save();
            this.Id = ECommerce.DAO.SQL.Productos.Producto.SetProducto(this);
            this.Id = ECommerce.DAO.Cache.Productos.Producto.SetProducto(this);
        }
        public override void Del()
        {
            base.Del();
            this.Id = ECommerce.DAO.Cache.Productos.Producto.DelProducto(this);
        }
        public void Add(ECommerce.Model.Productos.Package Package)
        {
            ECommerce.DAO.SQL.Productos.Producto.AddPackageToProducto(Package, this);
            ECommerce.DAO.Cache.Productos.Producto.DelPackagesByIdProducto(this.Id);

        }
        public override string ToString()
        {
            string result="";
            if (this.CódigosProducto != null && this.CódigosProducto.Length > 0)
                result += this.CódigosProducto[0].ToString() + ":";
            if (this.CódigosProducto != null && this.CódigosProducto.Length > 1)
                result += this.CódigosProducto[1].ToString() + " ";
            if (this.Familias != null && this.Familias.Length > 0)
                result += this.Familias[0].ToString() + "|";
            if (this.Familias != null && this.Familias.Length > 1)
                result += this.Familias[1].ToString() + "|";
            if (this.Familias != null && this.Familias.Length > 2)
                result += this.Familias[2].ToString() + "|";
            if (this.Familias != null && this.Familias.Length > 3)
                result += this.Familias[3].ToString() + " ";
            return result + base.ToString();
        }
    }
}
